package com.blog.cmrpersonalblog.dto.announcement.response;

import lombok.Data;
import java.time.LocalDateTime;

/**
 * 用户消息中心公告响应DTO
 * 用于用户消息中心查看所有公告（包括已读、未读、已忽略）
 */
@Data
public class UserAnnouncementMessageResponse {

    /**
     * 公告ID
     */
    private Long id;

    /**
     * 公告标题
     */
    private String title;

    /**
     * 公告内容
     */
    private String content;

    /**
     * 公告类型 1-系统公告 2-活动公告 3-维护公告 4-其他
     */
    private Integer type;

    /**
     * 公告类型名称
     */
    private String typeName;

    /**
     * 公告级别 1-普通 2-重要 3-紧急
     */
    private Integer level;

    /**
     * 公告级别名称
     */
    private String levelName;

    /**
     * 是否置顶 0-否 1-是
     */
    private Integer isTop;

    /**
     * 是否弹窗显示 0-否 1-是
     */
    private Integer isPopup;

    /**
     * 发布时间
     */
    private LocalDateTime publishTime;

    /**
     * 过期时间
     */
    private LocalDateTime expireTime;

    /**
     * 查看次数
     */
    private Integer viewCount;

    /**
     * 阅读状态 null-未读 1-已读 2-已忽略
     */
    private Integer readStatus;

    /**
     * 阅读状态名称
     */
    private String readStatusName;

    /**
     * 阅读时间
     */
    private LocalDateTime readTime;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 是否已读
     */
    private Boolean read;

    /**
     * 是否已忽略
     */
    private Boolean ignored;

    /**
     * 设置阅读状态名称
     */
    public void setReadStatusName() {
        if (readStatus == null) {
            this.readStatusName = "未读";
            this.read = false;
            this.ignored = false;
        } else if (readStatus == 1) {
            this.readStatusName = "已读";
            this.read = true;
            this.ignored = false;
        } else if (readStatus == 2) {
            this.readStatusName = "已忽略";
            this.read = false;
            this.ignored = true;
        }
    }

    /**
     * 设置公告类型名称
     */
    public void setTypeName() {
        if (type == null) {
            this.typeName = "未知";
            return;
        }
        switch (type) {
            case 1:
                this.typeName = "系统公告";
                break;
            case 2:
                this.typeName = "活动公告";
                break;
            case 3:
                this.typeName = "维护公告";
                break;
            case 4:
                this.typeName = "其他";
                break;
            default:
                this.typeName = "未知";
        }
    }

    /**
     * 设置公告级别名称
     */
    public void setLevelName() {
        if (level == null) {
            this.levelName = "未知";
            return;
        }
        switch (level) {
            case 1:
                this.levelName = "普通";
                break;
            case 2:
                this.levelName = "重要";
                break;
            case 3:
                this.levelName = "紧急";
                break;
            default:
                this.levelName = "未知";
        }
    }
}

